﻿#include "list.h"
// 所以就有删除或是插入的时候，会判断有没有 队列为空的时候。  
void initQueue(queue_t * queue_eg)  
{  
	queue_eg->head = 0; //队头标志位  
	queue_eg->tail = 0; //队尾标志位  
}  

/*2.向链队的队尾插入一个元素x*/  
void enQueue(queue_t *hq, void* x)  
{  
	node_t * new_p = 0;  
	new_p = (node_t *)malloc(sizeof(node_t));  
	if (new_p == 0 )  
	{  
		return;
	}  
	new_p->data = x;  
	new_p->next = NULL;  
	if (hq->head == NULL)  
	{  
		hq->head = new_p;  
		hq->tail = new_p;  
	} else {   
		hq->tail->next = new_p;  
		hq->tail = new_p;  
	}  
	return;  
}  

/*3. 从列队中队首删除</span>一个元素*/
int64_t  outQueue(queue_t * hq)  
{  
	node_t * p;  
	void* temp;  
	if (hq->head == NULL)  
	{  
		return 0;  
	}  
	temp = hq->head->data;  
	p = hq->head;  
	hq->head = hq->head->next;  
	if(hq->head == NULL)  
	{  
		hq->tail = NULL;  
	}  
	free(p);  
	return (int64_t )temp;  
}  

/*4. 读取队首元素 */  
int64_t  peekQueue(queue_t * hq)  
{  
	if (hq->head == NULL)  
	{  
		return 0;
	}   
	return (int64_t)hq->head->data;  
}  
/*4. 读取队首元素 */  
int64_t  endQueue(queue_t * hq)  
{  
	if (hq->tail == NULL)  
	{  
		return 0;
	}   
	return (int64_t)hq->tail->data;  
}  

/*5. 检查队列是否为空，若是空返回1，若不为空返回0 。*/  
int is_emptyQueue(queue_t * hq)  
{  
	if (hq->head == NULL)  
	{  
		return 1;  
	} else {  
		return 0;  
	}  
}  

/*6. 清除链队中的所有元素*/  

void clearQueue(queue_t * hq)  
{  
	node_t * p = hq->head;  
	while(p != NULL)  
	{  
		hq->head = hq->head->next;
		free(p->data);  
		free(p);  
		p = hq->head;  
	}  
	hq->tail = NULL;  
	return;  
}  
